home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr05
/
shwdib.zip
/
PRINT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-26
|
8KB
|
189 lines
/*******************************************************************************
* *
* MODULE : Print.c *
* *
* DESCRIPTION : Routines used for printing. *
* *
* FUNCTIONS : GetPrinterDC() - Gets default printer from WIN.INI and *
* creates a DC for it. *
* *
* InitPrinting() - Initializes print job. *
* *
* TermPrinting() - Terminates print job. *
* *
* PrintDlgProc() - Dialog function for the "Cancel Printing" *
* dialog. *
* *
* AbortProc() - Peeks at message queue for messages from *
* the print dialog. *
* *
*******************************************************************************/
// COPYRIGHT:
//
// (C) Copyright Microsoft Corp. 1992. All rights reserved.
//
// You have a royalty-free right to use, modify, reproduce and
// distribute the Sample Files (and/or any modified version) in
// any way you find useful, provided that you agree that
// Microsoft has no warranty obligations or liability for any
// Sample Application Files which are modified.
#include <windows.h>
#include <string.h>
#include "showdib.h"
FARPROC lpfnAbortProc = NULL;
FARPROC lpfnPrintDlgProc = NULL;
HWND hWndParent = NULL;
HWND hDlgPrint = NULL;
BOOL bError;
BOOL bUserAbort;
BOOL FAR PASCAL AbortProc (HDC, short);
BOOL FAR PASCAL PrintDlgProc (HWND, unsigned, WORD, DWORD);
#pragma alloc_text(_PRINT, AbortProc, PrintDlgProc)
/****************************************************************************
* *
* FUNCTION : GetPrinterDC() *
* *
* PURPOSE : Read WIN.INI for default printer and create a DC for it. *
* *
* RETURNS : A handle to the DC if successful or NULL otherwise. *
* *
****************************************************************************/
HDC PASCAL GetPrinterDC ()
{
static char szPrinter[80];
char *szDevice, *szDriver, *szOutput;
GetProfileString("windows", "device", "", szPrinter, sizeof(szPrinter));
if ((szDevice = strtok(szPrinter, ",")) && (szDriver = strtok(NULL, ", "))
&& (szOutput = strtok(NULL, ", ")))
return CreateDC(szDriver, szDevice, szOutput, NULL);
return NULL;
}
/****************************************************************************
* *
* FUNCTION : InitPrinting(HDC hDC, HWND hWnd, HANDLE hInst, LPSTR msg) *
* *
* PURPOSE : Makes preliminary driver calls to set up print job. *
* *
* RETURNS : TRUE - if successful. *
* FALSE - otherwise. *
* *
****************************************************************************/
BOOL PASCAL InitPrinting (HDC hDC, HWND hWnd, HANDLE hInst, LPSTR msg)
{
bError = FALSE; /* no errors yet */
bUserAbort = FALSE; /* user hasn't aborted */
hWndParent = hWnd; /* save for Enable at Term time */
lpfnPrintDlgProc = MakeProcInstance(PrintDlgProc, hInst);
lpfnAbortProc = MakeProcInstance(AbortProc, hInst);
hDlgPrint = CreateDialog(hInst, "PRTDLG", hWndParent, lpfnPrintDlgProc);
if (!hDlgPrint)
return FALSE;
SetWindowText(hDlgPrint, msg);
EnableWindow(hWndParent, FALSE); /* disable parent */
if ((Escape(hDC, SETABORTPROC, 0, (LPSTR)lpfnAbortProc, NULL) > 0) && (
Escape(hDC, STARTDOC, lstrlen(msg), msg, NULL) > 0))
bError = FALSE;
else
bError = TRUE;
/* might want to call the abort proc here to allow the user to
* abort just before printing begins */
return TRUE;
}
/****************************************************************************
* *
* FUNCTION : TermPrinting(HDC hDC) *
* *
* PURPOSE : Terminates print job. *
* *
****************************************************************************/
void PASCAL TermPrinting (HDC hDC)
{
if (!bError)
Escape(hDC, ENDDOC, 0, NULL, NULL);
if (bUserAbort)
Escape(hDC, ABORTDOC, 0, NULL, NULL);
else
{
EnableWindow(hWndParent, TRUE);
DestroyWindow(hDlgPrint);
}
FreeProcInstance(lpfnAbortProc);
FreeProcInstance(lpfnPrintDlgProc);
}
/****************************************************************************
* *
* FUNCTION :PrintDlgProc (HWND, unsigned , WORD , DWORD ) *
* *
* PURPOSE :Dialog function for the "Cancel Printing" dialog. It sets *
* the abort flag if the user presses <Cancel>. *
* *
****************************************************************************/
BOOL FAR PASCAL PrintDlgProc (HWND hDlg, unsigned iMessage, WORD wParam, DWORD
lParam)
{
switch (iMessage)
{
case WM_INITDIALOG:
EnableMenuItem(GetSystemMenu(hDlg, FALSE), SC_CLOSE, MF_GRAYED);
break;
case WM_COMMAND:
bUserAbort = TRUE;
EnableWindow(hWndParent, TRUE);
DestroyWindow(hDlg);
hDlgPrint = 0;
break;
default:
return FALSE;
}
return TRUE;
}
/****************************************************************************
* *
* FUNCTION :AbortProc (HDC hPrnDC, short nCode) *
* *
* PURPOSE :Checks message queue for messages from the "Cancel Printing"*
* dialog. If it sees a message, (this will be from a print *
* cancel command), it terminates. *
* *
* RETURNS :Inverse of Abort flag *
* *
****************************************************************************/
BOOL FAR PASCAL AbortProc (HDC hPrnDC, short nCode)
{
MSG msg;
while (!bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return !bUserAbort;
}